"""
研究 GDP动态柱状图
ThemeType:主题的类型
Timeline：时间图
"""
from pyecharts.charts import Bar, Timeline
from pyecharts.options import *
from pyecharts.globals import ThemeType

# pandas:专门处理数据的第三方包

# 读取数据 csv格式的数据
f = open("/02_pyecharts_test/file/1960-2019全球GDP数据.csv", 'r', encoding="GB2312")
# 一行一行的读取
data_lines = f.readlines()
f.close()

# 删除第一条数据  list.pop(0) 是删除语句
data_lines.pop(0)
# 将数据转换为 字段存储 格式为：
# {年份:[[国家,gdp],[[国家,gdp]]]}

# 定义字典对象 dict={}
data_dict = {}
for line in data_lines:
    year = int(line.split(",")[0])  # 年份
    country = line.split(",")[1]  # 国家
    gdp = float(line.split(",")[2])  # gdp数据

    # 判断字段有没有指定的key
    try:
        data_dict[year].append([country, gdp])
    except KeyError:
        data_dict[year] = []
        data_dict[year].append([country, gdp])

# 创建时间线对象 主题为浅色
timeline = Timeline({"theme": ThemeType.LIGHT})

# 排序年份
sorted_year_list = sorted(data_dict.keys())
for year in sorted_year_list:
    # 里面的结果再次排序
    data_dict[year].sort(key=lambda element: element[1], reverse=True)
    # 取出本年份前8名的国家
    year_data = data_dict[year][0:8]
    x_data = []  # x轴数据
    y_data = []  # y轴数据
    for country_gdp in year_data:
        x_data.append(country_gdp[0])  # 添加x轴国家
        y_data.append(country_gdp[1])  # y轴添加gdp数据

    # 构建柱状图
    bar = Bar()
    x_data.reverse()
    y_data.reverse()
    bar.add_xaxis(x_data)
    bar.add_yaxis("GDP(亿)", y_data, label_opts=LabelOpts(position="right"))
    # 反转 x轴和y轴
    bar.reversal_axis()
    # 设置每一年的图表的标题
    bar.set_global_opts(
        title_opts=TitleOpts(title=f"{year}年全球前8GDP数据")
    )
    # 将柱状图添加到时间线图中
    timeline.add(bar, str(year))

# for循环每一年的数据，基于每一年的数据 创建每一年的bar对象

# 设置时间线自动播放
timeline.add_schema(
    play_interval=1000,  # 间隔时间
    is_timeline_show=True,
    is_auto_play=True,  # 自动播放
    is_loop_play=False  # 不循环加载
)

# 绘图
timeline.render(path="/02_pyecharts_test/html/gdp动态时间柱状图.html")
